~ chicken-core (master) /manual/Deviations from the standard


 1[[tags: manual]]
 2
 3== Confirmed deviations from R7RS
 4
 5Identifiers are by default case-sensitive (see [[Using the compiler]]).
 6
 7=== Number of arguments to procedures and macros
 8
 9The maximal number of arguments that may be passed to a
10compiled procedure or macro is limited to around 1000.
11Likewise, the maximum number of values that can be passed
12to continuations captured using {{call-with-current-continuation}}
13is 1000.  This is an implementation restriction that is unlikely
14to be lifted.
15
16
17=== Numeric string-conversion considerations
18
19In some cases the runtime system uses the numerical string-conversion
20routines of the underlying C library.  Consequently, the procedures
21{{string->number}}, {{read}}, {{write}}, and {{display}} do not obey
22read/write invariance for inexact numbers.
23
24
25=== Environments and non-standard syntax
26
27In addition to the standard bindings, {{scheme-report-environment}} and
28{{null-environment}} contain additional non-standard bindings for the
29following syntactic forms: {{import}}, {{require-extension}},
30{{require-library}}, {{begin-for-syntax}}, {{export}}, {{module}},
31{{cond-expand}}, {{syntax}}, {{reexport}}, {{import-for-syntax}}.
32
33=== Assignment to unbound variables
34
35{{set!}} may assign values to unbound variables; this creates a new
36top-level binding for the variable, as if {{define}} had been used
37instead. This extension must be used with care, as typos might cause
38unexpected results:
39
40<enscript highlight="scheme">
41> (let ((frob 5))
42    (set! frov (+ frob 1))  ; oops!
43    frob)
44> 5
45> frov
46> 6
47</enscript>
48
49== Unconfirmed deviations
50
51=== {{char-ready?}}
52
53The procedure {{char-ready?}} always returns {{#t}} for
54terminal ports.
55
56
57
58== Doubtful deviations
59
60== Non-deviations that might surprise you
61
62=== {{let-syntax}} and {{letrec-syntax}}
63
64{{let-syntax}} and {{letrec-syntax}} introduce a new scope.
65
66
67=== {{equal?}} compares all structured data recursively
68
69{{equal?}} compares all structured data with the exception of
70procedures recursively, while R7RS specifies that {{eqv?}} is used for
71data other than pairs, strings and vectors.  However, R7RS does not
72dictate the treatment of data types that are not specified by R7RS
73
74
75---
76Previous: [[Using the compiler]]
77
78Next: [[Extensions to the standard]]
Trap